<!--
  Copyright JS Foundation and other contributors, http://js.foundation

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<script type="text/html" data-help-name="http request">
    <p>HTTPリクエストを送信し、レスポンスを返します。</p>

    <h3>入力</h3>
    <dl class="message-properties">
        <dt class="optional">url <span class="property-type">文字列</span></dt>
        <dd>ノードの設定で指定していない場合、このプロパティでリクエストのurlを設定します。</dd>
        <dt class="optional">method <span class="property-type">文字列</span></dt>
        <dd>ノードの設定で指定していない場合、このプロパティでリクエストに用いるHTTPメソッドを設定します。<code>GET</code>, <code>PUT</code>, <code>POST</code>, <code>PATCH</code>, <code>DELETE</code>のいずれかを指定してください。</dd>
        <dt class="optional">headers <span class="property-type">オブジェクト</span></dt>
        <dd>リクエストのHTTPヘッダを指定します。注釈: <code>msg.headers</code>のヘッダは、ノード設定のヘッダで上書きされます。</dd>
        <dt class="optional">cookies <span class="property-type">オブジェクト</span></dt>
        <dd>設定すると、リクエストと共にクッキーを送ることができます。</dd>
        <dt class="optional">payload</dt>
        <dd>リクエストボディとして送るデータ</dd>
        <dt class="optional">rejectUnauthorized</dt>
        <dd><code>false</code>をセットすると、自己署名証明書を使用するhttpsサイトへのリクエストを許可します。</dd>
        <dt class="optional">followRedirects</dt>
        <dd><code>false</code>をセットすると、リダイレクトを行いません。デフォルトは<code>true</code>です。</dd>
        <dt class="optional">requestTimeout</dt>
        <dd>正のミリ秒数をセットすると、 グローバルに設定された<code>httpRequestTimeout</code>パラメータを上書きします。</dd>
    </dl>
    <h3>出力</h3>
    <dl class="message-properties">
        <dt>payload <span class="property-type">文字列 | オブジェクト | バッファ</span></dt>
        <dd>レスポンスボディ。返却するボディデータを文字列、JSON文字列として解釈した結果、バイナリバッファのままのいずれにするかを、ノード設定により指定できます。</dd>
        <dt>statusCode <span class="property-type">数値</span></dt>
        <dd>レスポンスのステータスコード、もしくは、リクエストが完了しなかった場合のエラーコード。</dd>
        <dt>headers <span class="property-type">オブジェクト</span></dt>
        <dd>レスポンスヘッダを含むオブジェクト</dd>
        <dt>responseUrl <span class="property-type">文字列</span></dt>
        <dd>リクエストの処理時にリダイレクトが発生した場合、このプロパティが最後にリダイレクトされたURLを表します。リダイレクトが起こらなかった場合、最初リクエストのURLを表します。</dd>
        <dt>responseCookies <span class="property-type">オブジェクト</span></dt>
        <dd>レスポンスがクッキーを含む場合、このプロパティは各クッキーの名前/値を含むオブジェクトを表します。</dd>
        <dt>redirectList <span class="property-type">配列</span></dt>
        <dd>リクエストが一回以上リダイレクトされた場合は、このプロパティに情報が蓄積されます。`location`は、リダイレクト先を示します。`cookies`は、リダイレクト元から返されたクッキー情報です。</dd>
    </dl>
    <h3>詳細</h3>
    <p>ノードの設定でurlプロパティを指定する場合、<a href="http://mustache.github.io/mustache.5.html" target="_blank">mustache形式</a>のタグを含めることができます。これにより、URLを入力メッセージの値から構成することができます。例えば、urlが<code>example.com/{{{topic}}}</code>の場合、<code>msg.topic</code>の値による置き換えを自動的に行います。{{{...}}}表記を使うと、/、&といった文字をmustacheがエスケープするのを抑止できます。</p>
    <p><b>注</b>: proxyサーバを利用している場合、環境変数<code>http_proxy=...</code>を設定してNode-REDを再起動するか、あるいはノードの設定でプロキシを設定してください。もしノードの設定でプロキシを設定した場合、環境変数よりもこちらの設定が優先されます。</p>
    <h4>複数のHTTPリクエストノードの利用</h4>
    <p>同一フローで本ノードを複数利用するためには、<code>msg.headers</code>プロパティの扱いに注意しなくてはなりません。例えば、最初のノードがレスポンスヘッダにこのプロパティを設定し、次のノードがこのプロパティをリクエストヘッダに利用するというのは一般的には期待する動作ではありません。<code>msg.headers</code>プロパティをノード間で変更しないままとすると、2つ目のノードで無視されることになります。カスタムヘッダを設定するためには、<code>msg.headers</code>をまず削除もしくは空のオブジェクト<code>{}</code>にリセットします。
    <h4>クッキーの扱い</h4>
    <p>ノードに<code>cookies</code>プロパティを渡す場合、その値はキー/値ペアからなるオブジェクトとしてください。値にはクッキーの値として設定する文字列、もしくは、単一の<code>value</code>プロパティを含むオブジェクトを指定できます。</p>
    <p>リクエストに対して返却されたクッキーは<code>responseCookies</code>プロパティに格納されます。</p>
    <h4>要素タイプの扱い</h4>
    <p><code>msg.payload</code>がオブジェクトの場合、リクエストの要素タイプを<code>msg.payload</code>に自動的に設定し、ボディーをJSONに変換します。</p>
    <p>リクエストをフォームデータにエンコードするには、<code>msg.headers["content-type"]</code>を<code>application/x-www-form-urlencoded</code>に設定します。</p>
    <h4>ファイルのアップロード</h4>
    <p><code>msg.headers["content-type"]</code>に<code>multipart/form-data</code>を指定するとファイルをアップロードできます。この際、ノードの<code>msg.payload</code>に渡されるデータは以下の構造を持ったオブジェクトとします:</p>
    <pre><code>{
    "KEY": {
        "value": FILE_CONTENTS,
        "options": {
            "filename": "FILENAME"
        }
    }
}</code></pre>
    <p><code>KEY</code>, <code>FILE_CONTENTS</code> および <code>FILENAME</code>には適切な値を設定してください。</p>

</script>
